// 封装 vuex 子模块 user：用来管理所有与用户相关的状态
//导入token的方法
import { getToken, setToken, removeToken, setTimeStamp } from "../../utils/auth.js";

// 导入登录接口
import { loginApi } from '@/api/user'
//导入用户信息接口
import { getuserInfoApi } from "@/api/user";
//导入获取员工基本信息
import { getEmployessApi } from "@/api/emloyees";
//状态
const state = {
  //保存用户登录后的token
  token: getToken(),
  //保存用户信息
  userInfo: {}
}

//修改
const mutations = {
  //保存token
  setToken(state, payload) {
    //保存到 vuex 中
    state.token = payload
    // 保存 cookie 中
    setToken(payload)
    // 写入时间戳
    // 将当前的最新时间写入缓存
    setTimeStamp()
  },
  //清除token
  removeToken(state) {
    //vuex中清除
    state.token = null
    //从cookie 清除
    removeToken()
  },

  //保存信息
  setuserInfo(state, payload) {
    state.userInfo = payload
  },
  //清除用户信息
  removeuserInfo(state) {
    state.userInfo = {}
  }

}

//异步
const actions = {
  //登录请求
  async login(context, payload) {
    try {
      //调用接口
      const res = await loginApi(payload)
      //console.log(res);
      //保存token
      //判断返回的状态
      if (res.success) {
        const token = res.data
        context.commit('setToken', token)

      }
    } catch (error) {
      console.log(error.message);
      //把错误抛出给 login/index.vue的登录方法中
      return Promise.reject(error)
    }
  },
  //获取用户信息请求
  async getuserInfo(context) {
    //发送请求
    const res = await getuserInfoApi()
    // console.log(res);
    //在获取另一部分的信息
    const baseRes = await getEmployessApi(res.data.userId)
    //将两个接口的数据合并
    const result = { ...res.data, ...baseRes.data }
    //保存用户
    context.commit('setuserInfo', result)
    // 埋一个伏笔：返回得到的用户信息
    return result
  },
  //退出登录
  logout(context) {
    //清除token
    context.commit('removeToken')
    //请出用户信息
    context.commit('removeuserInfo')
  }

}


export default {
  namespaced: true,
  state,
  mutations,
  actions
}